sec092fandomcom-20200214-history
Chapter 12 - Software Security
Review Questions Define the difference between software quality and reliability and software security Software Quality - the program behaves well on normal input (does what its supposed to do) or on normal, but unexpected input (gracefully handles the problem). Software Reliability - the program behaves well (gracefully) on non-normal (even malicious) input. Software Quality and Reliability is concerned with the accidental failure of a program as a result of an unexpected input. Software Security is concerned with the intentional attack of a program as a result of totally unexpected input that will not be discovered by regular input testing. Define defensive programming גישה ששמה דגש על שמירה על אמינות התוכנה. ה"מוטו" הוא שאסור להניח שום הנחות. צריך לוודא כל קלט, כל הנחה לגבי פעולות מסויימות (פוסט-קונדישנז) וכל פלט מהתוכנה. List some possible sources of program input קלט מהמקלדת, מקובץ מידע, מקובץ קונפיגורציה, מהרשת, מסביבת הריצה (משתני סביבה) וכו' (כל דבר שלא ידוע בזמן קומפילציה?) Define an injection attack. List some examples of injection attacks, What are the general circumstances in which injection attacks are found? שימוש בקלט בפורמט חוקי על מנת לשנות התנהגות. הזרקה מתרחשת בד"כ כאשר פקודה בתוכנה מורכבת בחלקה מקלט מהמשתמש. command injections - when the input is used in privleges of the web server. to counter this attack the programmer must identify any assumtions of the form of input and verify that any input data conform to those assumtions before any use of data. SQL injections - when the user-supplied input is used to construct a SQL query. to prevent this attack the input must be validated before use. code injections - when the input includes code that is then executed by the attacked system for example a buffer overflow case. remote code injections - when a web server has the prievlidges to execute a command. State the similarities and differences between command injection and SQL injection דומה: שתיהן התקפות שמזריקות קוד ומשנות התנהגות. שונה: הקוד המורץ רץ תחת מערכות שונות (שרת בסיסי נתונים, shell), עם הרשאות שונות, עם סביבה שונה, עם מידע שונה שניתן לגשת אליו ופעולות שונות שניתן לבצע. Define a cross-site scripting attack, List an example of such an attack. שתילת תוכן זדוני באתר לגיטימי, שיורץ בעתיד באתר אחר. לדוגמא: שליתה של סקריפט בטוקבק באתר חדשות. הסקריפט יורץ במחשב של המשתמש שקורא את הטוקבק (ולא בשרת של האתר). State the main technique used by a defensive programmer to validate assumptions about program input. התאמה של הקלט לתבנית לגיטימית בעזרת regular-expressions עריכה (הוספה): בדיקת גודל הקלט ומשמעותו State a problem that can occur with input validation when the Unicode character set is used. לאותו תו יכולים להיות כמה ייצוגים (לא רק ביוניקוד). כדי להתגבר על הבעיה יש קודם כל "לפרוס" את הקלט לצורתו המלאה (canonicalize) ואז לבדוק אותו. כלומר, לתרגם קודם את כל הרצפים שמייצגים לדוגמא את האות "א" ל"א" ואז לבדוק את הקלט. Define input fuzzing. State where this technique should be used טכניקה לבדיקת ההתמודדות של תוכנה עם קלט. בטכניקה זו מייצרים קלט רנדומלי ופשוט "מפציצים" את המערכת בקלטים כאלה - קלטים לא סבירים בתוכנם, באורכם, לרוב חסרי משמעות. ניתן גם להשתמש בתבניות מסויימות כדי "לקלוע" לבעיות נפוצות אולם רצוי להשתמש גם בקלטים אקראיים לגמרי. List several software security concerns associated writing safe program code Buffer Overflow, Interpretation of input (wrong type, out of range, unauthorized filenames), Injection Attacks, Cross-Site Scripting (XSS), Race Conditions, replacing legitimate dynamic libraries with malicious ones, tampering with environment variables, "hijacking" temporary files (also an input to the program). Define race condition, State how it can occur when multiple processes access shared memory. occures when multiple processes and threads compete to gain uncontrolled access to some resource. Identify several concerns associated with the use of environment variables by shell scripts, Enviorment variables are a collection of string values inherited by each process from its parant that can affect the way a running process behaves. הסקריפט משתמש במשתני סביבה לדוגמא: במשתנה PATH כדי למצוא תוכנות מסויימות על המחשב ולהריץ אותן במשתנה LD_SOMETHING כדי למצוא ספריות שנטענות דינאמית בריצת התוכנית. תוקף יכול לשנות את המשתנים הנ"ל לפני הרצת הסקריפט ולגרום לכך שתוכנות זדוניות ירוצו במקום התוכנות הלגיטימיות, או ספריות זדוניות יטענו במקום הספריות הלגיטימיות, וכך לשנות את התנהגות התכנית על מנת בין השאר לקבל הרשאות גבוהות יותר. Define the principle of least privilege יש לאפשר לתוכנה גישה מינימלית ככל הניתן למשאבים במערכת. תוכנות עם הרשאות root הן היעד העיקרי של תקיפות (מי שמצליח להשתלט עליהן מקבל גישה לכל המערכת). לעיתים התוכנה זקוקה להרשאות רבות רק בתחילת הריצה או רק בחלקים מסויימים. במקרים כאלה שווה לשקול "לשבור" את התוכנה לכמה חלקים ולתת הרשאות מתאימות לכל חלק. טכניקה זו ידועה בשם chroot jail Identify several issues associated with the correct creation and use of a lockfile a lockfile is a way to handle the controlled access to a file from multiple processes. an process that detects a lock file must wait untill it is removed before creating his own lockfile. But if a process chooses to ignore the existance of a lock file the system will not orevent it. Another flaw is that checking for the existance of a lockfile and creating it is not an atomic action so if a context switch occured and the other process got cpu time a violation may occur. This is a classic example of a race condition. Identify several issues associated with the correct creation and use of a temporary file in a shared directory A temporary file is a way for a process to store temporary data in a unique file that can't be accessed by other processes by adding the process id to the temporary file name. An attacker can guess the temporary filename a root process will use in the time between the root process checks that such file does not exist and creating it. An example is when an attack guessed the temporary filename of a root process and made a symbolic link to the password file, rewriting the password file and denying access to the system for all users. When a file is created in a shared temporary directory, the access permissions should specify that only the owner ofthe temporary file, or the system admin should be able to remove it. This is not always the default so in a shared directory an attacker could have default permission to change a process temp file. List some problems that may result from a program sending unvalidated input from one user to another user 1. performaing actions as if the local user performed them himself by escaping the actions. 2. Cross site scripting (XSS or CSS) attack.